#ifndef FUQUOS_KERNEL_CONF_H
#define FUQUOS_KERNEL_CONF_H

/*
    下面的宏定义用于配置内核的月异常服务(ISR)[简单说就是配置异常向量表]
*/
#define ENABLE_ISR_REGISTRATION 1  // 是否启用异常服务注册(启用后注册异常服务函数)
#ifdef ENABLE_ISR_REGISTRATION 
    #define ENABLE_ISR_DIVIDE_ERROR 1          // #DE  0  除零错误
    #define ENABLE_ISR_DEBUG 1                 // #DB  1  调试异常
    #define ENABLE_ISR_NMI 1                   // #NMI 2  非屏蔽中断
    #define ENABLE_ISR_BREAKPOINT 1            // #BP  3  断点（int 3）
    #define ENABLE_ISR_OVERFLOW 1              // #OF  4  溢出
    #define ENABLE_ISR_BOUND_RANGE_EXCEEDED 1  // #BR  5  数组边界超限
    #define ENABLE_ISR_INVALID_OPCODE 1        // #UD  6  无效指令
    #define ENABLE_ISR_DEVICE_NOT_AVAILABLE 1  // #NM  7  设备不可用（无数学协处理器）
    #define ENABLE_ISR_DOUBLE_FAULT 1          // #DF  8  双重错误
    #define ENABLE_ISR_COPROCESSOR_SEGMENT_OVERRUN 1  // #9   协处理器段超限（保留，不再使用）
    #define ENABLE_ISR_INVALID_TSS 1           // #TS 10  无效 TSS
    #define ENABLE_ISR_SEGMENT_NOT_PRESENT 1   // #NP 11  段不存在
    #define ENABLE_ISR_STACK_SEGMENT_FAULT 1   // #SS 12  堆栈段错误
    #define ENABLE_ISR_GENERAL_PROTECTION 1    // #GP 13  通用保护异常
    #define ENABLE_ISR_PAGE_FAULT 1            // #PF 14  页面错误
    #define ENABLE_ISR_RESERVED 1              // #15  这个中断号保留
    #define ENABLE_ISR_X87_FPU_ERROR 1         // #MF 16  x87 浮点异常
    #define ENABLE_ISR_ALIGNMENT_CHECK 1       // #AC 17  对齐检查
    #define ENABLE_ISR_MACHINE_CHECK 1         // #MC 18  机器检查
    #define ENABLE_ISR_SIMD_FLOATING_POINT 1   // #XM 19  SIMD 浮点异常


    /*
        下面的宏定义用于配置是否启用异常服务的 asm volatile("hlt");
    */
    #define ENABLE_ISR_HLT_ALL 1
    #ifdef ENABLE_ISR_HLT_ALL
        #define ENABLE_ISR_HLT 1                       // 是否启用 asm volatile("hlt");
        #define ENABLE_ISR_HLT_DIVIDE_ERROR            // #DE  0  除零错误
        #define ENABLE_ISR_HLT_DEBUG 1                 // #DB  1  调试异常
        #define ENABLE_ISR_HLT_NMI 1                   // #NMI 2  非屏蔽中断
        #define ENABLE_ISR_HLT_BREAKPOINT 1            // #BP  3  断点（int 3）
        #define ENABLE_ISR_HLT_OVERFLOW 1              // #OF  4  溢出
        #define ENABLE_ISR_HLT_BOUND_RANGE_EXCEEDED 1  // #BR  5  数组边界超限
        #define ENABLE_ISR_HLT_INVALID_OPCODE 1        // #UD  6  无效指令
        #define ENABLE_ISR_HLT_DEVICE_NOT_AVAILABLE 1  // #NM  7  设备不可用（无数学协处理器）
        #define ENABLE_ISR_HLT_DOUBLE_FAULT 1          // #DF  8  双重错误
        #define ENABLE_ISR_HLT_COPROCESSOR_SEGMENT_OVERRUN 1  // #9   协处理器段超限（保留，不再使用）
        #define ENABLE_ISR_HLT_INVALID_TSS 1           // #TS 10  无效 TSS
        #define ENABLE_ISR_HLT_SEGMENT_NOT_PRESENT 1   // #NP 11  段不存在
        #define ENABLE_ISR_HLT_STACK_SEGMENT_FAULT 1   // #SS 12  堆栈段错误
        #define ENABLE_ISR_HLT_GENERAL_PROTECTION 1    // #GP 13  通用保护异常
        #define ENABLE_ISR_HLT_PAGE_FAULT 1            // #PF 14  页面错误
        #define ENABLE_ISR_HLT_RESERVED 1              // #15  这个中断号保留
        #define ENABLE_ISR_HLT_X87_FPU_ERROR 1         // #MF 16  x87 浮点异常
        #define ENABLE_ISR_HLT_ALIGNMENT_CHECK 1       // #AC 17  对齐检查
        #define ENABLE_ISR_HLT_MACHINE_CHECK 1         // #MC 18  机器检查
        #define ENABLE_ISR_HLT_SIMD_FLOATING_POINT 1   // #XM 19  SIMD 浮点异常

    #endif

#endif



/*
    下面的宏定义用于测试异常服务(ISR)
*/
#define TEST_ISR_TRIGGER 1  // 是否测试异常服务
#ifdef TEST_ISR_TRIGGER
    #define TEST_ISR_DIVIDE_ERROR 1
    #define TEST_ISR_DEBUG 1
    #define TEST_ISR_NMI 1
    #define TEST_ISR_BREAKPOINT 1
    #define TEST_ISR_OVERFLOW 1
    #define TEST_ISR_BOUND_RANGE_EXCEEDED 1
    #define TEST_ISR_INVALID_OPCODE 1
    #define TEST_ISR_DEVICE_NOT_AVAILABLE 1
    #define TEST_ISR_DOUBLE_FAULT 1
    #define TEST_ISR_COPROCESSOR_SEGMENT_OVERRUN 1
    #define TEST_ISR_INVALID_TSS 1
    #define TEST_ISR_SEGMENT_NOT_PRESENT 1
    #define TEST_ISR_STACK_SEGMENT_FAULT 1
    #define TEST_ISR_GENERAL_PROTECTION 1
    #define TEST_ISR_PAGE_FAULT 1
    #define TEST_ISR_RESERVED 1
    #define TEST_ISR_X87_FPU_ERROR 1
    #define TEST_ISR_ALIGNMENT_CHECK 1
    #define TEST_ISR_MACHINE_CHECK 1
    #define TEST_ISR_SIMD_FLOATING_POINT 1

#endif

#endif // FUQUOS_KERNEL_CONF_H





